home *** CD-ROM | disk | FTP | other *** search
-
- Ultimo aggiornamento: 8.12.99
-
- Introduzione:
-
- L'INTERFACCIA DI VISUALPREFS PER SVILUPPATORI
-
- Documento in preparazione
-
-
- Se sei uno sviluppatore puoi usufruire di certe funzionalità di VisualPrefs.
-
- Anche se non esiste ancora una vera e propria API di VisualPrefs per gli
- sviluppatori è già possibile utilizzare le classi BOOPSI che VisualPrefs
- aggiunge al sistema.
-
- Lo scopo di queste classi è fornire ai programmatori un modo facile di
- ottenere il "look di VisualPrefs" senza dover aspettare che io implementi
- in VisualPrefs un patch per i loro applicativi. ;-)
-
- Attualmente c'è solo una classe:
-
- "tbiclass" - la classe di immagini per la titlebar (titlebar image class)
-
- Questa classe fornisce le immagini più comunemente usate per i gadget
- aggiunti dagli applicativi alla titlebar delle loro finestre. Esempi di
- ciò sono l'onnipresente gadget "iconify" o il gadget "padlock" di DirOpus 5.
-
- Tutti i programmi che usano questa classe riceveranno automaticamente lo
- stesso aspetto per le loro immagini per la titlebar se VisualPrefs è in
- funzione. Probabilmente è meglio che avere miriadi di versioni diverse
- della stessa immagine...
-
- Puoi usare "tbiclass" proprio come "sysiclass"; sono entrambe sottoclassi di
- "imageclass". Un'immagine "tbiclass" può essere creata chiamando NewObject()
- con i seguenti tag:
-
- SYSIA_DrawInfo - Questo è assolutamente necessario. DEVI passare a "tbiclass"
- un puntatore a DrawInfo oppure NewObject() fallirà.
-
- SYSIA_Which - Per specificare quale immagine si vuole; attualmente ci sono
- sei tipi di immagine:
-
- POPUPIMAGE - Immagine per il gadget "pop-up" di MUI
- MUIIMAGE - Immagine per il gadget "settings" di MUI
- SNAPSHOTIMAGE - Immagine per il gadget "snapshot" di MUI
- ICONIFYIMAGE - Immagine per il gadget "iconify"
- PADLOCKIMAGE - Immagine per il gadget "padlock" di DirOpus
- TBFRAMEIMAGE - Immagine vuota (solo contorno) di uso generale
-
- IA_Width, IA_Height - Questi sono riconosciuti solo dal tipo TBFRAMEIMAGE;
- gli altri tipi di immagine li ignorano e hanno sempre
- la stessa dimensione del gadget di profondità.
-
- SYSIA_ReferenceFont - Questo è riconosciuto solo dal tipo TBFRAMEIMAGE;
- gli altri tipi di immagine lo ignorano e hanno sempre
- la stessa altezza del gadget di profondità.
-
- TBIA_FullFrame - Questo è riconosciuto solo dal tipo TBFRAMEIMAGE; impostarlo
- a TRUE per ottenere un'immagine che contiene anche una
- cornice interna, se lo stile corrente ne prevede una. Questa
- è la scelta più adatta quando il contenuto dell'immagine è
- di natura grafica. Impostarlo a FALSE per ottenere
- un'immagine con al più la cornice esterna; questa è invece
- la scelta più adatta quando l'immagine deve contenere del
- testo (poiché la cornice interna potrebbe essere troppo
- piccola per scriverci dentro il testo). Il default è FALSE.
- (Disponibile a partire da VisualPrefs 41.38)
-
- È anche possibile usare questo tag con GetAttr():
-
- TBIA_ContentsBox - Per chiedere all'immagine la posizione e la dimensione
- del suo effettivo "box dei contenuti" relativamente
- all'immagine stessa. Tale box è la parte in cui, se
- necessario, è possibile aggiungere ulteriori immagini
- personalizzate. Questo probabilmente ha senso solo con
- immagini TBFRAMEIMAGE. Per posizionare correttamente il
- box occorre aggiungere i suoi valori di offset Left e Top
- a quelli dell'immagine. Notare che, anche entro le
- dimensioni restituite, bisognerebbe sempre lasciare un
- piccolo spazio (per esempio due pixel) intorno alle
- proprie immagini, per ottenere risultati esteticamente
- migliori. Questo è un attributo a sola lettura; il valore
- che si passa a questo tag deve essere un puntatore a una
- struttura IBox. NON passare un puntatore a longword!
- (Disponibile a partire da VisualPrefs 41.35)
-
- Naturalmente se NewObject() fallisce dovresti fornire una immagine di ripiego
- creata dal tuo programma. Tuttavia ho rilasciato una classe "tbiclass"
- esterna freeware (dev/gui/titlebar_ic.lha) che potrai includere nella
- distribuzione dei tuoi applicativi. Questa classe fornirà le immagini
- necessarie e verrà sostituita automaticamente da quella di VisualPrefs
- se sarà presente.
- Di conseguenza puoi mantenere molto semplici le tue immagini di ripiego,
- o non averle affatto ;-)
-
- Se usi TBFRAMEIMAGE per creare delle tue immagini speciali per la titlebar
- puoi aggiungervi un contenuto in due modi: impostando il campo NextImage
- all'indirizzo della tua immagine interna, oppure facendo una sottoclasse di
- "tbiclass" e ridefinendo i metodi IM_DRAW/IM_DRAWFRAME (ovviamente in questo
- caso devi lasciare che la superclasse esegua prima il suo rendering!).
-
- È importante notare che tutte le istanze di immagini "tbiclass" avranno un
- valore di -1 in Image->LeftEdge. Questo non dovrebbe venire modificato e
- dovresti posizionare i tuoi gadget nella titlebar rispettando ciò. Il motivo
- di questo apparentemente strano comportamento è che anche le immagini dei
- gadget di Intuition per la titlebar funzionano in questo modo, e dovremmo
- cercare di mantenere la massima compatibilità con Intuition.
-
- Inoltre assicurati di modificare se necessario la dimensione del tuo gadget
- per adattarla alla dimensione dell'immagine ottenuta.
-
- Un esempio di tutto ciò potrebbe essere:
-
- ...
-
- /* Crea l'immagine */
-
- if (!(iconifyimage = NewObject(NULL,"tbiclass",SYSIA_Which,ICONIFYIMAGE,
- SYSIA_DrawInfo,dri,
- TAG_END)))
- {
- iconifyimage = builtin_iconifyimage;
- }
-
- /* Usa l'immagine */
-
- gad->GadgetRender = iconifyimage;
- ...
-
- /* Libera l'immagine */
-
- if (iconifyimage != builtin_iconifyimage) DisposeObject(iconifyimage);
-
- ...
-
- Questo è tutto. Il vero file include per "tbiclass" si trova nella release
- a sè stante su Aminet, comunque tutto ciò che ti serve per usare "tbiclass"
- nei tuoi applicativi è inserire le righe seguenti in cima al tuo codice
- sorgente. :-]
-
- ------ taglia qui ------8<------ taglia qui ------8<------ taglia qui ------
-
- #define POPUPIMAGE (101)
- #define MUIIMAGE (102)
- #define SNAPSHOTIMAGE (103)
- #define ICONIFYIMAGE (104)
- #define PADLOCKIMAGE (105)
- #define TBFRAMEIMAGE (106)
-
- #define TBIA_Dummy (TAG_USER + 0x0B0000)
- #define TBIA_ContentsBox (TBIA_Dummy + 0x0001)
- #define TBIA_FullFrame (TBIA_Dummy + 0x0002)
-
- ------ taglia qui ------8<------ taglia qui ------8<------ taglia qui ------
-
- C'è già un applicativo che usa "tbiclass", ViNCEd di Thomas Richter.
-
- Spero che anche tu supporterai "tbiclass" e contribuirai in tal modo a
- dare finalmente un aspetto consistente a tutti i gadget per la titlebar
- usati negli applicativi!
-
- Grazie,
- Massimo Tantignone (tanti@intercom.it)
-
-
-
-